<?php

use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query;

class DefaultDb_Repositories_ReportsVehiclesRepository extends EntityRepository
{

    /**
     * Obtenemos información para el reporte de incidencia de vehículos
     * @param integer $vehicleId
     * @return \Report
     */
    public function reportFails($vehicleId)
    {
        $em = $this->getEntityManager();
        $conn = $em->getConnection();

        $queryMX = "SET character_set_results = 'utf8';";
        $conn->executeQuery($queryMX);

        $queryMX = "SET lc_time_names = 'es_MX';";
        $conn->executeQuery($queryMX);

        $queryMX = "SET character_set_results = 'utf8';";
        $conn->executeQuery($queryMX);

        $queryMX = "SET collation_connection = @@collation_database;";
        $conn->executeQuery($queryMX);
        $query = "
            SELECT 
                  v.name vehiculo
                , CASE rv.type
                    WHEN 1 THEN 'Mantenimiento preventivo'
                    WHEN 2 THEN 'Falla mecánica'
                    WHEN 3 THEN 'Multa de tránsito'
                  END str_type
                , rv.description 
                , DATE_FORMAT(rv.creation_date,'%W, %d de %M de %Y, %h:%i %p') fecha
            FROM reports_vehicles rv
            INNER JOIN vehicles v ON rv.vehicle_id = v.id
            WHERE ( rv.vehicle_id = :vehicleId OR :vehicleId IS NULL)";
        $res = $conn->executeQuery($query, ['vehicleId' => $vehicleId]);
        $data = $res->fetchAll(PDO::FETCH_ASSOC);
        $headers = array(
            'Vehículo' => true,
            'Tipo' => true,
            'Descripción' => true,
            'Fecha' => true
        );
        $report = new Report($data, $headers);
        return $report;
    }

    /**
     * Insertamos un reporte de un vehículo
     * @param DefaultDb_Entities_Vehicle $vehicle
     * @param DefaultDb_Entities_User $user
     * @param string $description Cadena con la descripcion del reporte
     * @param int $type Tipo de reporte
     * @return \DefaultDb_Entities_ReportVehicle
     */
    public function insert(DefaultDb_Entities_Vehicle $vehicle, DefaultDb_Entities_User $user, $description, $type)
    {
        $newObject = new DefaultDb_Entities_ReportVehicle();

        $newObject->setVehicle($vehicle);
        $newObject->setUser($user);
        $newObject->setDescription($description);
        $newObject->setType($type);
        $em = $this->getEntityManager();
        $em->persist($newObject);
        $em->flush();
        return $newObject;
    }

}